Esqueleto básico das 4 Operações
Executar o script abaixo no banco de dados MySQL para criar a tabela usuário;
-- Cria o banco de dados
CREATE DATABASE IF NOT EXISTS teste_db;

-- Seleciona o banco
USE teste_db;

-- Cria a tabela usuario
CREATE TABLE IF NOT EXISTS usuario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(150) NOT NULL,
    data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Copiar esta versão da aplicação JAVA para o VsCode e testar a sua execução.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class App {

    public static void main(String[] args) {

        //string    Conexao com o banco
        //mysql     Definicação do SGBD utilizado
        //localhost O endereço do Servidor onde o banco de dados está hospedado
        //3306      A porta tcp do banco de dados
        //teste_db  Nome do banco de dados
        final String STR_CONNECTION = "jdbc:mysql://localhost:3306/teste_db";
        
        //Usuario para conectar no banco de dados
        final String USER = "root";

        //Senha para conectar no banco de dados
        final String PASSWORD = "12345678";

        //Variavel para armazenar a conexao estabelecida com o banco de dados
        Connection conn = null;

        //Comandos preparados para evitar SQL Injection
        PreparedStatement psInsert = null;
        PreparedStatement psSelect = null;
        PreparedStatement psUpdate = null;
        PreparedStatement psDelete = null;

        //Variavel para armazenar as respostas do banco de dados
        ResultSet rs = null;

        //Variavel para armazenar o id gerado no bando de dados
        int idGerado = 0;

        try {

            String nome = "Pedro Paulo";
            String email = "pedro@email.com";

            //Cria a conexão com o banco de dados e armazena em conn
            conn = DriverManager.getConnection(STR_CONNECTION, USER, PASSWORD);
            System.out.println("Conexão ao banco de dados realizada com sucesso!");

            // 1. INSERT 
            String insertSql = "INSERT INTO usuario (nome, email) VALUES (?, ?)";

            // Montar a consulta preparada para evitar SQL Injection
            // Statement.RETURN_GENERATED_KEYS para que diz para o banco de dados devolver o id gerado na inserção (chave primária)
            psInsert = conn.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);

            //Substitui o primeiro ? por pedro
            psInsert.setString(1, nome);
            //Substitui o segundo ? por pedro@email.com
            psInsert.setString(2, email);

            //Envia o SQL gerado para o banco de dados realizar o insert
            psInsert.executeUpdate();

            //Obter o id gerado como chave primaria na tabela de usuario
            rs = psInsert.getGeneratedKeys();

            //Verifica se existe um id e armazena na variavel
            if (rs.next()) 
                idGerado = rs.getInt(1);
            
            System.out.println("INSERT realizado com sucesso!");
            System.out.println("O(a) " + nome + " foi inserido no banco com ID: " + idGerado);

            // 2. SELECT
            String selectSql = "SELECT * FROM usuario";

            //Executa a consulta no banco de dados
            psSelect = conn.prepareStatement(selectSql);
            
            //Guarda em rs o resultado da consulta realizado no banco de dados (linhas e colunas)
            rs = psSelect.executeQuery();

            System.out.println("Resultado da consulta:");
            
            //Existe alguma linha que foi retornada do banco de dados
            while (rs.next()) {
                //rs.getInt("id") obtem a coluna id que tem valor inteiro retornada do banco de dados
                //rs.getString("nome") obtem a coluna nome que tem valor string retornada do banco de dados
                System.out.println(
                        "ID: " + rs.getInt("id") +
                        ", Nome: " + rs.getString("nome") +
                        ", Email: " + rs.getString("email") +
                        ", Data Cadastro: " + rs.getString("data_criacao")
                );
            }

            // 3. UPDATE usando ID
            String novoEmail = "pedrof@email.com";
            String updateSql = "UPDATE usuario SET email = ? WHERE id = ?";

            //Prepara o SQL para receber as substiticoes evitando sql injection
            psUpdate = conn.prepareStatement(updateSql);

            //Realiza as substituicoes das ? pelo valor correto
            psUpdate.setString(1, novoEmail);
            psUpdate.setInt(2, idGerado);

            //Executa o update no banco de dados
            psUpdate.executeUpdate();

            System.out.println("UPDATE realizado!");

            // 4. DELETE usando ID
            String deleteSql = "DELETE FROM usuario WHERE id = ?";

            //Prepara o SQL para receber as substituicoes evitando sql injection
            psDelete = conn.prepareStatement(deleteSql);

            //Faz a substituicacao da ? pelo idGerado
            psDelete.setInt(1, idGerado);

            //Executa a operação de delete no banco de dados
            psDelete.executeUpdate();

            System.out.println("DELETE realizado!");

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //encerrar as conexões criadas e demais recursos
            try {
                if (rs != null) rs.close();
                if (psInsert != null) psInsert.close();
                if (psSelect != null) psSelect.close();
                if (psUpdate != null) psUpdate.close();
                if (psDelete != null) psDelete.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}